#ifndef _NETPCAP_INTF_H_
#define _NETPCAP_INTF_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stdbool.h>
#include <time.h>

/*抓包数据结构文件头*/
typedef struct {
    struct timeval ts;        /*时间戳 (微秒)*/
    uint32_t frame_len;        /*数据 (以太网帧)长度*/
    uint8_t *frame_data;       /*数据 (以太网帧)指针*/
    int link_type;             /*链路类型*/
} pcap_intf_pkt_t;

typedef int (*pcap_intf_pkt_handler) (void *pkt, void *ctx);

typedef void (*pcap_intf_stop_handler) (void *ctx);

typedef void* pcapmgr_ptr;

/**
 * @brief 抓包参数
 */
typedef struct netpcap_param
{
    char *task_name;    // 抓包任务标识
    char *if_name;      // 接口名
    char *filter;       // 抓包过滤条件
    char *file_dir;     // 文件目录
    bool replay_file;   // 抓包文件回放 
    bool write_file;    // 抓包写文件
    pcap_intf_pkt_handler pkt_handler;
    pcap_intf_stop_handler stop_handler;
    void *ctx;          // 处理函数的上下文
} pcap_intf_param_t;


pcapmgr_ptr pcapmgr_new();

void pcapmgr_start_capture(pcapmgr_ptr pcapmgr, pcap_intf_param_t *param);

void pcapmgr_stop_capture(pcapmgr_ptr pcapmgr, char *task_name);

void pcapmgr_stop_all_capture(pcapmgr_ptr pcapmgr);

void pcapmgr_log_set_level(pcapmgr_ptr pcapmgr, uint32_t level, bool trace_func);

#ifdef __cplusplus
}
#endif

#endif